/**
 * org.assess.core.common.MathUtils
 */
package org.assess.core.common;

import java.util.Random;

/**
 * @description Math Util Collection
 * @author XiaLongxiang
 * @createtime 2011-12-17 上午12:01:31
 */
public final class MathUtils {
    
    /** 随机种子 */
    private static Random random;
    
    /**
     * 获取一个随机范围在0（包含）到num（不包含）之间的随机数
     * @param num
     * @return
     */
    public static int getRandomNum(int num) {
        if (random == null) {
            synchronized (MathUtils.class) {
                if (random == null) {
                    random = new Random();
                }
            }
        }
        
        return random.nextInt(num);
    }
    
    /**
     * 获取一个随机范围在min（包含）到max（不包含）之间的随机数
     * @param min
     * @param max
     * @return
     */
    public static int getRandomNum(int min, int max) {
        if (random == null) {
            synchronized (MathUtils.class) {
                if (random == null) {
                    random = new Random();
                }
            }
        }
        
        return random.nextInt(max - min) + min;
    }
    
    /**
     * 判断输入的字符串是否是number型
     * @return
     */
    public static boolean isNumber(String str) {
        if (org.apache.commons.lang.xwork.StringUtils.isEmpty(str)) {
            return false;
        }
        for (char ch : str.toCharArray()) {
            if (!Character.isDigit(ch)) {
                return false;
            }
        }
        
        return true;
    }
    
    /**
     * 判断输入的字符串是否是number型，且具有指定的length长度
     * @param str
     * @param length
     * @return
     */
    public static boolean isNumber(String str, int length) {
        if (org.apache.commons.lang.xwork.StringUtils.isEmpty(str) || str.length() != length) {
            return false;
        }
        
        return isNumber(str);
    }
    
    /**
     * 判断输入的字符串是否是number型，且长度在min到max之间
     * @param str
     * @param min
     * @param max
     * @return
     */
    public static boolean isNumber(String str, int min, int max) {
        if (org.apache.commons.lang.xwork.StringUtils.isEmpty(str) || str.length() < min || str.length() > max) {
            return false;
        }
        
        return isNumber(str);
    }
    
    /**
     * 将byte数组转换成long值
     * @param data
     * @return
     */
    public static long parse16(byte[] data) {
        int result = 0;
        if (data != null && data.length > 0) {
            int index = 0;
            for (int i = data.length - 1; i >= 0; i--) {
                if (index < 8) {
                    result = result | ((data[i] & 0xff) << (index * 8));
                    index++;
                }
                else {
                    break;
                }
            }
        }
        
        return result;
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        byte[] b = ByteUtils.parse16("32");
        long result = parse16(b);
        System.out.println(StringUtils.parse16(result, true));
    }
}
